package com.zan.sync;

/**
 * @Author Zan
 * @Create 2024/2/29 10:44
 * @Description :
 */
public class SaleTicket {
    // 第二步：创建多个线程，调用资源类的操作方法
    public static void main(String[] args) {
        // 2.1 创建Ticket对象
        Ticket ticket = new Ticket();

        // 2.2 创建三个线程
        // 第一个AA线程
        new Thread(new Runnable() {
            @Override
            public void run() {
                // 调用卖票方法
                for (int i = 0; i < 40; i++) {
                    ticket.sale();
                }
            }
        }, "AA").start();

        // 第二个BB线程
        new Thread(new Runnable() {
            @Override
            public void run() {
                // 调用卖票方法
                for (int i = 0; i < 40; i++) {
                    ticket.sale();
                }
            }
        }, "BB").start();

        // 第三个CC线程
        new Thread(new Runnable() {
            @Override
            public void run() {
                // 调用卖票方法
                for (int i = 0; i < 40; i++) {
                    ticket.sale();
                }
            }
        }, "CC").start();
    }
}

// 第一步：创建资源类，定义属性和操作方法
class Ticket {
    // 票数
    private int number = 30;

    // 操作方法：卖票 (加锁, synchronized是自动上锁和解锁)
    public synchronized void sale() {
        // 判断：是否有票 - 票为0的时候，就不能卖了
        if (number > 0) {
            System.out.println(Thread.currentThread().getName() + " : 卖出第" + (number--) + "张, 剩下：" + number);
        }
    }
}
